import apiClient from '../apiClient';
import {
  MetahumanStartRes,
  MetahumanCheckRes,
  MetahumanStopRes,
  MetahumanPermissionConfig,
  MetahumanAvatarsRes,
  MetahumanApi,
  MetahumanConnectionStatusRes,
  MetahumanPermissionStatusRes,
  MetahumanPermissionCreateReq,
  MetahumanPermissionUpdateReq,
  MetahumanPermissionDeleteReq,
  MetahumanPermissionRes,
  MetahumanConnectionLimitRes,
  MetahumanGlobalPermissionUpdateReq,
  MetahumanGlobalPermissionUpdateRes,
  MetahumanGlobalPermissionStatusRes,
  MetahumanPermissionConfigUpdateReq,
  MetahumanTurnCredentialsRes,
} from '@/types/metahuman';

/**
 * 启动数字人
 * @param avatarId 数字人ID
 * @param appId 应用ID
 * @returns 启动结果
 */
const startMetahuman = (avatarId: string, appId: string, signal?: AbortSignal) =>
  apiClient.post<MetahumanStartRes>({
    url: `${MetahumanApi.Start}/${avatarId}`,
    params: { appId },
    signal,
  });

/**
 * 检查数字人状态
 * @param taskId 任务ID
 * @returns 状态信息
 */
const checkMetahuman = (taskId: string, signal?: AbortSignal) =>
  apiClient.get<MetahumanCheckRes>({
    url: `${MetahumanApi.Check}/${taskId}`,
    signal,
  });

/**
 * 停止数字人
 * @param taskId 任务ID
 * @returns 停止结果
 */
const stopMetahuman = (taskId: string) =>
  apiClient.post<MetahumanStopRes>({
    url: `${MetahumanApi.Stop}/${taskId}`,
  });

/**
 * 获取应用数字人权限配置
 * @param appId 应用ID
 * @returns 权限配置信息
 */
const getMetahumanPermissionConfig = (appId: string, appWorkbenchType: string, versionId?: string) =>
  apiClient.get<MetahumanPermissionConfig>({
    url: `${MetahumanApi.PermissionConfig}/${appId}`,
    params: {
      versionId,
      appWorkbenchType,
    },
  });

/**
 * 更新应用数字人权限配置
 * @param appId 应用ID
 * @returns 权限配置信息
 */
const updateMetahumanPermissionConfig = (appId: string, data: MetahumanPermissionConfigUpdateReq) =>
  apiClient.post<MetahumanPermissionRes>({
    url: `${MetahumanApi.PermissionPermissionUpdate}/${appId}`,
    data,
  });

/**
 * 获取数字人头像列表
 * @returns 头像列表
 */
const getMetahumanAvatars = () =>
  apiClient.get<MetahumanAvatarsRes>({
    url: MetahumanApi.Avatars,
  });

/**
 * 获取数字人连接状态
 * @returns 连接状态信息
 */
const getMetahumanConnectionStatus = () =>
  apiClient.get<MetahumanConnectionStatusRes>({
    url: MetahumanApi.ConnectionStatus,
  });

/**
 * 获取数字人权限状态
 * @returns 权限状态信息
 */
const getMetahumanPermissionStatus = () =>
  apiClient.get<MetahumanPermissionStatusRes>({
    url: MetahumanApi.PermissionStatus,
  });

/**
 * 创建数字人权限
 * @param data 权限创建请求数据
 * @returns 创建结果
 */
const createMetahumanPermission = (data: MetahumanPermissionCreateReq) =>
  apiClient.post<MetahumanPermissionRes>({
    url: MetahumanApi.PermissionCreate,
    data,
  });

/**
 * 更新数字人权限
 * @param data 权限更新请求数据
 * @returns 更新结果
 */
const updateMetahumanPermission = (data: MetahumanPermissionUpdateReq) =>
  apiClient.post<MetahumanPermissionRes>({
    url: MetahumanApi.PermissionUpdate,
    data,
  });

/**
 * 删除数字人权限
 * @param data 权限删除请求数据
 * @returns 删除结果
 */
const deleteMetahumanPermission = (data: MetahumanPermissionDeleteReq) =>
  apiClient.post<MetahumanPermissionRes>({
    url: MetahumanApi.PermissionDelete,
    data,
  });

/**
 * 获取数字人连接限制
 * @returns 连接限制信息
 */
const getMetahumanConnectionLimit = () =>
  apiClient.get<MetahumanConnectionLimitRes>({
    url: MetahumanApi.ConnectionLimit,
  });

/**
 * 更新全局数字人资源权限配置
 * @param data 全局权限配置请求数据
 * @returns 更新结果
 */
const updateMetahumanGlobalPermission = (data: MetahumanGlobalPermissionUpdateReq) =>
  apiClient.post<MetahumanGlobalPermissionUpdateRes>({
    url: MetahumanApi.GlobalPermissionUpdate,
    data,
  });

/**
 * 获取全局数字人资源权限状态
 * @returns 全局权限状态信息
 */
const getMetahumanGlobalPermissionStatus = () =>
  apiClient.get<MetahumanGlobalPermissionStatusRes>({
    url: MetahumanApi.GlobalPermissionStatus,
  });

/**
 * 获取数字人TURN凭证
 * @returns TURN凭证信息
 */
const getMetahumanTurnCredentials = () =>
  apiClient.get<MetahumanTurnCredentialsRes>({
    url: MetahumanApi.TurnCredentials,
  });


export default {
  startMetahuman,
  checkMetahuman,
  stopMetahuman,
  getMetahumanPermissionConfig,
  updateMetahumanPermissionConfig,
  getMetahumanAvatars,
  getMetahumanConnectionStatus,
  getMetahumanPermissionStatus,
  createMetahumanPermission,
  updateMetahumanPermission,
  deleteMetahumanPermission,
  getMetahumanConnectionLimit,
  updateMetahumanGlobalPermission,
  getMetahumanGlobalPermissionStatus,
  getMetahumanTurnCredentials,
};
